﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSemanticAnalyser.SemanticTree
{
    using daBase.Objects.Safe;
    using daSyntaxAnalyser.SyntaxTree;

    /// <summary>
    /// Файловый элемент
    /// </summary>
    public class FileSemanticElement : SectionedSemanticElement, INamedSemanticElement
    {
        private string name;
        private List<UnitSemanticElement> units;

        /// <summary>
        /// Имя элемента
        /// </summary>
        public string Name { get { return name; } set { name = value; } }

        /// <summary>
        /// Подключенные модули
        /// </summary>
        public List<UnitSemanticElement> Units { get { return units; } set { units = value; } }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="Name">имя элемента</param>
        /// <param name="Parent">родительский элемент</param>
        /// <param name="Units">подключенные модули</param>
        /// <param name="Consts">константы</param>
        /// <param name="Resourcestrings">строковые ресурсы</param>
        /// <param name="Types">типы</param>
        /// <param name="Vars">переменные</param>
        /// <param name="Threadvars">потоковые переменные</param>
        /// <param name="Methods">методы</param>
        /// <param name="SyntaxElement">соответствующий элемент синтаксического дерева</param>
        public FileSemanticElement(string Name, IChildSemanticElement Parent, List<UnitSemanticElement> Units, List<ConstSemanticElement> Consts, List<ResourceStringSemanticElement> Resourcestrings, List<CommonTypeSemanticElement> Types, List<VarSemanticElement> Vars, List<ThreadvarSemanticElement> Threadvars, List<MethodSemanticElement> Methods, ISyntaxTreeElement SyntaxElement)
            : base(Parent, Consts, Resourcestrings, Types, Vars, Threadvars, Methods, SyntaxElement)
        {
            name = Name;
            units = (Units == null) ? new List<UnitSemanticElement>() : Units;
        }

        /// <summary>
        /// Вывод элемента как строки
        /// </summary>
        /// <returns>строковое представление элемента</returns>
        public override string ToString()
        {
            return name;
        }
    }
}
